# 多态：同一条指令，不同的对象，产生的行为是不一样的

"""
（1）若类中无init方式但父类中有，则调用父类的init方法
（2）若类中的方法与父类中的方法同名，则调用时使用类中的方法，而不使用父类中的同名方法
"""


class Dog(object):
    def __init__(self, name):
        self.name = name

    def game(self):
        print(f"{self.name} 蹦蹦跳跳的玩耍...")


class XiaoTianQuan(Dog):
    def game(self):
        print(f"{self.name} 飞到天上去玩耍...")


class Person:
    def __init__(self, name):
        self.name = name

    def game_with_dog(self, dog: Dog):
        print("%s 和 %s 快乐的玩耍..." % (self.name, dog.name))
        dog.game()  # 多态


if __name__ == '__main__':
    zhangsan = Person('张三')
    wangcai = Dog('旺财')
    zhangsan.game_with_dog(wangcai)
    xiaotianquan = XiaoTianQuan('哮天犬')
    zhangsan.game_with_dog(xiaotianquan)
